const ModbusRTU = require("modbus-serial");
const client = new ModbusRTU();

// --- 需要您填写的信息 ---
const ipAddress = "127.0.0.1";              // 替换成您的设备IP地址
const port = 502;                         // 替换成您的设备端口 (通常是 502)
const unitId = 1;                         // 替换成您的设备 Modbus ID (通常是 1)

//双工位并发测试
//1.先给左右工位写入不同的加工结果
//2.给左右工位同时写入加工完成信号
//3.观察PLC是否能正确处理
async function test(){
    try {
        // 连接到设备
        await client.connectTCP(ipAddress, { port: port });
        client.setID(unitId);
        console.log(`Connected to ${ipAddress}:${port}`);
        
        // 1. 写入不同加工结果到左右工位
        // 假设左工位加工结果寄存器地址为8010，右工位为8040
        // 1表示合格，2表示不合格
        await client.writeRegister(8144, 1); // 左工位结果：合格
        console.log("左工位加工结果写入成功: 合格(1)");
        
        await client.writeRegister(8194, 2); // 右工位结果：不合格
        console.log("右工位加工结果写入成功: 不合格(2)");

        // 读取处理结果
        // 假设处理结果寄存器地址为8021(左)和8051(右)
        let leftResult = await client.readHoldingRegisters(8140, 1);
        let rightResult = await client.readHoldingRegisters(8190, 1);

        console.log("左工位完成信号:", leftResult.data[0]);
        console.log("右工位完成信号:", rightResult.data[0]);
        
        // 2. 同时写入加工完成信号
        // 假设左工位加工完成信号地址为8020，右工位为8050
        console.log("正在同时写入左右工位加工完成信号...");
        await Promise.all([
            client.writeRegister(8140, 1),
            client.writeRegister(8190, 1)
        ]);
        console.log("左右工位加工完成信号同时写入成功");
        
        // 3. 等待并观察PLC处理结果
        console.log("等待PLC处理...");
        await new Promise(resolve => setTimeout(resolve, 3000));

        // 读取处理结果
        // 假设处理结果寄存器地址为8021(左)和8051(右)
         leftResult = await client.readHoldingRegisters(8140, 1);
         rightResult = await client.readHoldingRegisters(8190, 1);

        console.log("左工位完成信号:", leftResult.data[0]);
        console.log("右工位完成信号:", rightResult.data[0]);
        
    } catch (e) {
        console.error("测试出错:", e.message);
    } finally {
        if (client.isOpen) client.close();
        console.log("测试完成，连接已关闭");
    }
}

test()